guice 配置模块的两种方式 <3>

guice 配置模块的两种方式 <3>

guice是使用module进行绑定的,它提供了两种方式进行操作.

第一种是继承AbstractModule抽象类.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 import com.google.inject.AbstractModule;

/**
* 继承 AbstractModule这个抽象类
* @author bruce
*
*/
public class TestModule extends AbstractModule{

@Override
protected void configure() {

bind(Dog.class).to(DarkDog.class);

}
}

第二种是实现Module接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import com.google.inject.Binder;
import com.google.inject.Module;

/**
* 实现module 接口
* @author bruce
*
*/
public class GoogleGuiceModule implements Module{

@Override
public void configure(Binder arg) {
arg.bind(Dog.class).to(DarkDog.class);
}


}

例子代码如下:

1
2
3
4
5
6
public class Dog {

void eat(){
System.out.println("父类的在go,go,go。。。");
}
}
1
2
3
4
5
6
7
8
9
10
public class DarkDog extends Dog{

@Override
void eat() {
System.out.println("heeeelo");
//super.eat();
}


}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 import com.google.inject.AbstractModule;

/**
* 继承 AbstractModule这个抽象类
* @author bruce
*
*/
public class TestModule extends AbstractModule{

@Override
protected void configure() {

bind(Dog.class).to(DarkDog.class);

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import com.google.inject.Binder;
import com.google.inject.Module;

/**
* 实现module 接口
* @author bruce
*
*/
public class GoogleGuiceModule implements Module{

@Override
public void configure(Binder arg) {
arg.bind(Dog.class).to(DarkDog.class);
}


}

测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
import com.google.inject.Guice;
import com.google.inject.Injector;


public class Test {

public static void main(String[] args) {
Injector injector = Guice.createInjector(new GoogleGuiceModule());
// Injector injector = Guice.createInjector(new TestModule()()); //跟上一行代码目标意义一样哦
Dog dog=injector.getInstance(Dog.class);
dog.eat();
}
}

==我们项目用得最多的是AbstractModule,当然如果有特殊需要,你也可以扩张Module了。==

生活不止苟且,还有我喜爱的海岸.